package com.sunfeng.netty.heima.bytebuf;

/**
 * @ClassName Demo03
 * @Description 由于 Netty 中有堆外内存的 ByteBuf 实现，堆外内存最好是手动来释放，而不是等 GC 垃圾回收。
 *  UnpooledHeapByteBuf 使用的是 JVM 内存，只需等 GC 回收内存即可
 *  UnpooledDirectByteBuf 使用的就是直接内存了，需要特殊的方法来回收内存
 *  PooledByteBuf 和它的子类使用了池化机制，需要更复杂的规则来回收内存
 *
 *  Netty 这里采用了引用计数法来控制回收内存，每个 ByteBuf 都实现了 ReferenceCounted 接口
 *      每个 ByteBuf 对象的初始计数为 1
 *      调用 release 方法计数减 1，如果计数为 0，ByteBuf 内存被回收
 *      调用 retain 方法计数加 1，表示调用者没用完之前，其它 handler 即使调用了 release 也不会造成回收
 *      当计数为 0 时，底层内存会被回收，这时即使 ByteBuf 对象还在，其各个方法均无法正常使用
 * @Author 孙峰
 * @Date 2022/10/25 16:03
 */
public class Demo03 {
    public static void main(String[] args) {

    }
}
